package com.yupi.yuaiagent.agent;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

/**
 * ReAct 模式的代理抽象类
 * 实现了行动-推理的循环模式
 *
 * @className: ReActAgent
 * @author: xxy-Rain
 * @date: 2025/10/29 14:57
 * @version: 1.0
 * @description: TODO
 */
@EqualsAndHashCode(callSuper = true)
@Data
@Slf4j
public abstract class ReActAgent extends BaseAgent{

    /**
     * 处理当前状态并决定下一次行动
     * @return 是否需要执行行动，true表示需要执行act，false表示不需要执行act
     */
    public abstract boolean think();

    /**
     * 执行单个步骤，先推理再行动
     * @return 行动的结果
     */
    public abstract String act();

    @Override
    public String step(){
        try{
            //先思考
            boolean shouldAct = think();
            if (!shouldAct){
                return "思考完成 - 无需行动";
            }
            //行动
            return act();

        }catch (Exception e){

            e.printStackTrace();
            return "步骤执行失败：" + e.getMessage();
        }
    }
}
